package com.leetcode.No1037;

/**
 * @program: Solution
 * @description: 1037. 有效的回旋镖
 * @author: Wang Zhihua
 * @date: 2022-06-09
 */
public class Solution {

    public boolean isBoomerang(int[][] points) {
        // 重合点，false
        if (points[0][0] == points[1][0] && points[0][1] == points[1][1]) {
            return false;
        }
        if (points[0][0] == points[2][0] && points[0][1] == points[2][1]) {
            return false;
        }
        if (points[1][0] == points[2][0] && points[1][1] == points[2][1]) {
            return false;
        }

        int a1 = points[0][0] - points[1][0]; // 第一个点和第二个点的x轴距离
        int b1 = points[0][1] - points[1][1]; // 第一个点和第二个点的y轴距离

        int a2 = points[0][0] - points[2][0]; // 第一个点和第三个点的x轴距离
        int b2 = points[0][1] - points[2][1]; // 第一个点和第三个点的y轴距离

        // 所有点在同一个水平线、竖直线上，false
        if ((a1 == 0 && a2 == 0) || (b1 == 0 && b2 == 0)) {
            return false;
        }

        // 如果两个点在同一竖直线上，而第三个点不是，返回true
        if (b1 == 0 || b2 == 0) {
            return true;
        }
        // 上面的步骤保证了b1、b2都不为0，
        // 求正切tan，a1/b1 != a2/b2 才能保证三点不在同一条斜线上，
        // 所以等式变换 a1*b2 / b1*b2 != a2*b1 / b1*b2，放心去分母得到：
        if (a1 * b2 == a2 * b1) {
            return false;
        }

        // 剩余情况，true
        return true;
    }

    public static void main(String[] args) {
        int[][] nums = {{1,1},{2,3},{3,2}};
        System.out.println(new Solution().isBoomerang(nums));

        int[][] nums2 = {{1,1},{2,2},{3,3}};
        System.out.println(new Solution().isBoomerang(nums2));

        int[][] nums3 = {{1,1},{1,2},{1,3}};
        System.out.println(new Solution().isBoomerang(nums3));

        int[][] nums4 = {{2,2},{1,2},{1,3}};
        System.out.println(new Solution().isBoomerang(nums4));
    }

}
